package com.testing.sqlUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Classname MysqlTest
 * @Description 类型说明
 * @Date 2021/1/3 19:34
 * @Created by 勾勾
 */
public class MysqlTest {
    public static void main(String[] args) throws Exception {
        //1.使用mysql连接驱动jdbc
        //Class.forName指定需要使用的驱动
        Class.forName("com.mysql.jdbc.Driver");


        //2.打开Navicat进行连接的时候，首先要创建一下和数据库的连接
        //输入ip、端口、数据库名、用户名密码创建连接
        //ip:192.168.207.145 端口3306 连接名：vip5 用户：root 密码：Test123456
        //jdbc在连接数据库的时候一次只能打开一个数据库
        //url格式：协议jdbc:mysql://IP:端口/连接的数据库名？参数配置
        Connection ggCon= DriverManager.getConnection(
                "jdbc:mysql://192.168.207.148:3306/test_project?useSSL=false&useUnicode=true&autoReconnect=true&characterEncoding=utf-8",
                "root","Test123456");
        //3.创建查询
        Statement ggStatement = ggCon.createStatement();

        //4.编写查询语句
        queryResult(ggStatement);
    }

    public static void queryResult(Statement ggStatement) throws SQLException {
        String sql="select * from userinfo where pwd='666666'";
        //5.执行查询
        //得到结果集
        ResultSet resultSet = ggStatement.executeQuery(sql);
//        boolean next = resultSet.next();

        //看看resultSet是什么？ 类名@hashcode 继承object的toString方法
//        System.out.println(resultSet);

        //遍历resultSet中的内容(把列名输入进去)
//        System.out.println(resultSet.getString("username"));
//        System.out.println(resultSet.getString("pwd"));

        //获取表头信息,方便遍历每一列内容
        ResultSetMetaData thead = resultSet.getMetaData();


        //查询到的数据不止一条？怎么办？
        //使用一共list，把所有的map都存起来
        List<Map<String,String>> resultList=new ArrayList<>();

        //使用循环，读取resultSet中的每一行，通过next()取值
        //resultSet.next()有值，才进行操作
        while (resultSet.next()){
            //循环中，每获取一次数据，创建一个新的map来存这一行的值
            //一行的信息存储到map中
            Map<String,String> resultMap=new HashMap<>();

            //遍历表头信息的每一列，获取列名和值 (thead.getColumnCount()一共有多少列，那么就会有长度)
            for (int column=1;column<=thead.getColumnCount();column++){
                resultMap.put(thead.getColumnName(column),resultSet.getString(column));
                System.out.println("第"+column+"列的字段是"+thead.getColumnName(column)+"内容是"+resultSet.getString(column));
            }
            System.out.println(resultMap);
            //将每一行的数据map存储到List里面
            resultList.add(resultMap);
        }
        System.out.println(resultList);
    }
}
